package com.gw.smscheck.util;

import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.Random;

public class DoubleUtil {

    /**
     * 获取随机值
     * @param source
     * @return
     */
    public static Double getRandom(Double source,int nextInt,int threshold,double Offset){
        Double result = source;
        Random random = new Random();
        int temp =random.nextInt(nextInt);
        System.out.println("随机值"+temp);
        //不动
        if(temp < threshold){
            return result;
        }
        //动
        if(temp%2 ==0){
            result = add(source,temp*Offset);
        }else{
            result = sub(source,temp*Offset);
        }
        return result;
    }

    /**
     * 保留小数位数
     * @param num
     * @return
     */
    public static Double format(Double f,int num){
        String formatStr = "#.";
        for(int i=0;i<num;i++){
            formatStr += "0";
        }
        DecimalFormat df = new DecimalFormat(formatStr);
        Double result = Double.parseDouble(df.format(f));
        return result;
    }

    /**
     * 提供精确的加法运算。
     *
     * @param v1
     *            被加数
     * @param v2
     *            加数
     * @return 两个参数的和
     */
    public static  double add(double v1, double v2) {
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        return b1.add(b2).doubleValue();
    }

    /**
     * 提供精确的乘法运算。
     *
     * @param v1
     *            被乘数
     * @param v2
     *            乘数
     * @return 两个参数的积
     */
    public static  double mul(double v1, double v2) {
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        return b1.multiply(b2).doubleValue();
    }

    /**
     * 提供精确的减法运算。
     *
     * @param v1
     *            被减数
     * @param v2
     *            减数
     * @return 两个参数的差
     */
    public static double sub(double v1, double v2) {
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        return b1.subtract(b2).doubleValue();
    }
}
